// 定义一个函数，接受两个数组作为参数，返回一个新的数组
// 新的数组是根据第二个数组的对象覆盖第一个数组的对象，并加上较长数组剩余部分得到的
export function mergeObjectArrays(a, b) {
	// 如果a或b为空，则返回空数组
	if (!a || !b) return [];
	// 取a和b中较短的长度作为遍历次数
	let len = Math.min(a.length, b.length);
	// 使用扩展操作符（...）和map()方法遍历较短的数组，并将每个对象与较长的数组对应位置的对象合并，得到一个临时数组
	let temp = a.slice(0, len).map((item, index) => ({
		...item,
		...b[index]
	}));
	// 使用扩展操作符（...）将临时数组和较长数组剩余部分拼接在一起，返回一个新的数组
	return [...temp, ...a.slice(len), ...b.slice(len)];
}



// 定义一个函数，接受两个数组作为参数，返回一个新的数组
// 新的数组是根据第二个数组的对象覆盖第一个数组的对象，并将较长的部分继续从头跟较短的数组合并得到的
export function mergeObjectArraysByCycle(a, b) {
	// 如果a或b为空，则返回空数组
	if (!a || !b) return [];
	// 取a和b中较长和较短的长度作为变量
	let maxLen = Math.max(a.length, b.length);
	let minLen = Math.min(a.length, b.length);
	// 定义一个空数组作为结果
	let c = [];
	// 使用for循环遍历较长的长度次数，并取余数作为索引
	for (let i = 0; i < maxLen; i++) {
		// 使用扩展操作符（...）将a和b对应位置（取余数）的对象合并，并推入结果数组中
		c.push({
			...a[i % minLen],
			...b[i % minLen]
		});
	}
	// 返回结果数组
	return c;
}
